﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ninject;
using PGE.AfastamentosTempMVC.Modelo;
using PGE.AfastamentosTempMVC.Repositorio.Interfaces;

namespace PGE.AfastamentosTempMVC.Repositorio.Implementacao
{
    public class SetorRepositorio : ISetorRepositorio
    {
        private IUnitOfWork _UntWork;

        [Inject]
        public SetorRepositorio(IUnitOfWork UntWork)
        {
            _UntWork = UntWork;
        }

        #region ISetorRepositorio Members

        public void Adicionar(Setor setor)
        {
            _UntWork.contexto.Setores.Add(setor);
            _UntWork.Commit();
        }

        public void Editar(Setor setor)
        {
            _UntWork.contexto.Entry(setor).State = System.Data.EntityState.Modified;
            _UntWork.Commit();

        }

        public void Deletar(Setor setor)
        {
            _UntWork.contexto.Setores.Remove(setor);
            _UntWork.Commit();
        }

        public void DeletarMuitos(Func<Setor, bool> where)
        {
            _UntWork.contexto.Setores.Where(where).ToList().ForEach(Setor => _UntWork.contexto.Setores.Remove(Setor));
            _UntWork.Commit();
        }

        public Setor ObterPorID(int Id)
        {
            return _UntWork.contexto.Setores.Find(Id);
        }

        public Setor ObterPornome(Func<Setor, bool> where)
        {
            return _UntWork.contexto.Setores.Where(where).FirstOrDefault();
        }

        public Setor ObterPrimeiro()
        {
            return _UntWork.contexto.Setores.FirstOrDefault();
        }

        public Setor ObterPrimeiro(Func<Setor, bool> where)
        {
            return _UntWork.contexto.Setores.Where(where).FirstOrDefault();
        }

        public IEnumerable<Setor> ListarTudo()
        {
            return _UntWork.contexto.Setores.ToList();
        }

        public IQueryable<Setor> GetQueryable()
        {
            return _UntWork.contexto.Setores;
        }

        public IEnumerable<Setor> ListarMuitos(Func<Setor, bool> where)
        {
            return _UntWork.contexto.Setores.Where(where).ToList();
        }

        #endregion
    }
}
